package com.sso.auth.domain;

import com.sso.auth.entity.User;
import io.jsonwebtoken.Claims;

/**
 * 令牌领域服务接口。
 *
 * 职责：面向领域的令牌生命周期管理，对外屏蔽具体实现细节（JWT 等）。
 * - 生成访问令牌与刷新令牌
 * - 解析并验证令牌，返回声明信息
 */
public interface TokenDomainService {

    /**
     * 生成访问令牌（access token）。
     *
     * @param user                令牌主体用户
     * @param expirationSeconds   令牌有效期（秒）
     * @return 签发好的访问令牌字符串
     */
    String generateAccessToken(User user, long expirationSeconds);

    /**
     * 生成刷新令牌（refresh token）。
     *
     * @param user                令牌主体用户
     * @param expirationSeconds   令牌有效期（秒）
     * @return 签发好的刷新令牌字符串
     */
    String generateRefreshToken(User user, long expirationSeconds);

    /**
     * 解析并验证令牌，返回载荷中的声明（Claims）。
     *
     * @param token 待解析的令牌字符串
     * @return 解析出的声明
     * @throws io.jsonwebtoken.JwtException 当令牌无效或签名错误时抛出
     */
    Claims parseToken(String token);
}

